/**
 * 添加jquery.validate的扩展验证方法
 */
$.extend($.validator.methods, {
    notpass: function (v, e) {   //判断全局是否通过
        return false;
    },
    regexp: function (v, e, p) {
        return this.optional(e) || (typeof p == 'string' ? new RegExp(p) : p).test(v);
    },
    number2: function (v, e) {     //两位小数
        return this.optional(e) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d{1,2})?$/.test(v);
    },
    ciphertextRegex: function (v, e) {     // 验证密文区文字格式
        return this.optional(e) || /^([0-9\<\>\/\+\-\*])+$/.test(v);
    },
    ciphertextlength: function (v, e) {     // 验证密文区每行长度
        return this.optional(e) || v.length == 21 || v.length == 27 || v.length == 28;
    },
//    companyCodeValid:function(v,e){
//        return this.optional(e)||/^[A-Za-z0-9].{14,17}$/.test(v);
//    },
    plus: function (v, e, p) {      //匹配状态
        return this.optional(e) || Math.abs(v - (($(p[1]).val() * 1) / ($(p[0]).val() * 1)) * 100) < 0.5;
    },
    taxboxValid: function (v, e) {      //密文区长度必须为84、108或者112
        var chkValue = false;
        var length = $("#invTaxboxLine1").val().length + $("#invTaxboxLine2").val().length + $("#invTaxboxLine3").val().length + $("#invTaxboxLine4").val().length;
        if (v.length == $("#invTaxboxLine2").val().length
            && v.length == $("#invTaxboxLine3").val().length
            && v.length == $("#invTaxboxLine4").val().length) {
            if (length == 84 || length == 108 || length == 112) {
                chkValue = true;
            }
        }
        return this.optional(e) || chkValue;
    },
    //pncodeValid: function(v,e){ // PN单号验证 DR/DZ开头
    //  return this.optional(e)||/^(DR|DZ)\d{2}(1[0-2]|0[1-9])\d{8}([\r\n]+(DR|DZ)\d{2}(1[0-2]|0[1-9])\d{8})*[\r\n]*$/.test(v);
    //},
    taxrateValid: function(v,e){ // 税率验证(17.000/14.942/11.000/13.000/6.000/0.000)
      var taxrateValid = false;
      if((v-17 == 0) || (v-13 == 0) || (v-14.942 == 0) || (v-11 == 0) || (v-6 == 0) || (v-0 == 0)){
          return true;
      }
      return this.optional(e)||taxrateValid;
    },
    taxCodeValid: function (v, e, p) {
        return this.optional(e) || /^([0-9A-Z]{15}|[0-9A-Z]{18}|[0-9A-Z]{20})$/.test(v); // 税号必须是15位或18位或20位
    },
    ajaxValid: function (v, e, p) { // ajax异步验证
        var rs = false;
        $.ajax($.extend({
            dataType: 'json', async: false, type: 'POST', success: function (data) {
                rs = data;
            }
        }, p));
        return rs;
    },
    invoiceDateValid: function (v, e) { // 发票日期格式和180天账期
        var invoiceDate, intDate, nowDate;
        invoiceDate = v;
        var now = new Date();
        var year = now.getFullYear();       //年
        var month = now.getMonth() + 1;     //月
        var day = now.getDate();            //日
        nowDate = year + "-" + month + "-" + day;
        intDate = DateDiff(nowDate, invoiceDate);
        return this.optional(e) || intDate >= 0 && intDate <= 180;
    },
    nowDateValid: function (v, e) { // 发票日期不能大于当前日期
        var invoiceDate = v;
        var arrTime = invoiceDate.split("-");
        var valTime = new Date(arrTime[0], arrTime[1] - 1, arrTime[2]);
        var valTimes = valTime.getTime();
        var nowTime = new Date();
        var nowTimes = nowTime.getTime();
        return this.optional(e) || valTimes < nowTimes;
    },
    invCodeValid: function (v, e) {
        return this.optional(e) || /^\d{9}0$/.test(v); // 地区代码10位数字，且末位为0
    },
    invNormalCodeValid: function (v, e) {
        return this.optional(e) || /^\d{9}0$/.test(v) || /^\d{12}$/.test(v); // 地区代码10位数字，且末位为0或者地区代码12位数字
    },
    invNoValid: function (v, e) {
        return this.optional(e) || /^\d{8}$/.test(v);  // 发票号码8位数字
    },
    orderNoValid: function (v, e) {
        return this.optional(e) || /^\d{10}$/.test(v);  // 订单号10位数字
    },
    customerNoValid: function (v, e) {
        return this.optional(e) || /^\d{7}$|^\d{8}$|^\d{9}$/.test(v);  // 客户号7-9位数字
    },
    machine_numberValid: function (v, e) {
        return this.optional(e) || /^\d{12}$/.test(v);  // 验证机器编码 12位数字
    },
    machine_numberTaxBox112Valid: function (v, e) {       // 112位密文必须输入机器编码
        var taxBoxlength = $("#invTaxboxLine1").val().length + $("#invTaxboxLine2").val().length + $("#invTaxboxLine3").val().length + $("#invTaxboxLine4").val().length;
        if (taxBoxlength == 112) {
            if (v.length <= 0) {
                return /^\d{12}$/.test(v);
            }
        }
        return true;
    },
    machine_numberTaxBoxOtherValid: function (v, e) {     // 84位、108位密文机器编码必须为空
        var taxBoxlength = $("#invTaxboxLine1").val().length + $("#invTaxboxLine2").val().length + $("#invTaxboxLine3").val().length + $("#invTaxboxLine4").val().length;
        if (taxBoxlength == 84 || taxBoxlength == 108) {
            if (v.length > 0) {
                return false;
            }
        }
        return true;
    },
    total: function (v, e, p) {
        return this.optional(e) || (v - $(p[1]).val() - $(p[0]).val()).toFixed(2) == 0;
    },
    notZero: function (v, e) {
        return this.optional(e) || (v - 0 != 0);
    },
    invMaxAmount: function (v, e) {
        var maxInvAmount = parseFloat(v, 10);
        var maxAmount = parseFloat("1000000000", 10);
        if (maxInvAmount <= maxAmount || this.optional(e)) {
            return true;
        } else {
            return false;
        }
    },

    invTotalMaxAmount: function (v, e) {
        var maxInvAmount = parseFloat($("#invTotalAmount").val(), 10);
        //console.log(maxInvAmount);
        var maxAmount = parseFloat("1000000000", 10);
        //console.log(maxAmount);
        if (maxInvAmount <= maxAmount || this.optional(e)) {
            return true;
        } else {
            return false;
        }

    },
    ismorethan: function (v, e) {
        return this.optional(e) || /^$/;
    },
    stmtcode: function (v, e) {
        //return this.optional(e) || /^[1-9][0-9]{4,}(0[1-9]|1[0-2])[1-3]0(([\r\n]|)+[1-9][0-9]{4,}(1[0-2]|0[1-9])[1-3]0)*([\r\n]|)*$/.test(v);
        return this.optional(e) || /^(IV)\d{8}(([\r\n]|)+(IV)\d{8})*([\r\n])*$/.test(v);

    }
});

$.extend($.validator.messages, {
    regexp: function (v, e) {
        return "请输入正确的" + $(e).parent('div').prev().text().replace('：', '');
    },
    required: function (v, e) {
        return "请输入" + $(e).parent('td').prev().text().replace('：', '');
    },
    number2: function (v, e) {
        return $(e).parent('td').prev().text().replace(':', '') + "只能是两位小数";
    },
    ciphertextRegex: function (v, e) {
        return "密文区有不规范字符";
    },
    ciphertextlength: function (v, e) {
        return "密文区每行长度必须为21、27或28位字符";
    },
    taxboxValid: function (v, e) {
        return "密文区总长度必须为84、108或者112位字符";
    },
    taxCodeValid: function (v, e) {
        return "税号总长度必须为15、18、20位字符";
    },
    number: function (v, e) {
        return $(e).parent('td').prev().text().replace(':', '') + "只能是数字";
    },
    plus: function (v, e) {
        return $(e).parent('td').prev().text().replace(':', '') + "不匹配";
    },
    //pncodeValid: function(v,e){
    //  return "请输入正确的PN单号";
    //},
    taxrateValid: function(v,e){
      return "请输入正确的税率！税率包括（17,14.942,11,13,6,0）";
    },
    machine_numberValid: function (v, e) {
        return $(e).parent('td').prev().text().replace(':', '') + "只能是12位数字";
    },
    invoiceDateValid: function (v, e) {
        return $(e).parent('td').prev().text().replace(':', '') + "不在合理范围内";
    },
    invCodeValid: function (v, e) {
        return "发票代码必须为10位数字，且末尾为0";
    },
    invNormalCodeValid: function (v, e) {
        return "地区代码10位数字，且末位为0或者地区代码12位数字";
    },
    invNoValid: function (v, e) {
        return "发票号码必须为8位数字";
    },
    orderNoValid: function (v, e) {
        return "订单号必须为10位数字";
    },
    customerNoValid: function (v, e) {
        return "客户号必须为7-9位数字";
    },
    nowDateValid: function (v, e) {
        return "发票日期不能大于当前日期";
    },
    machine_numberTaxBox112Valid: function (v, e) {
        return "请录入112位密文发票的机器编码（必须）";
    },
    machine_numberTaxBoxOtherValid: function (v, e) {
        return "84位或108位密文发票的机器编码必须为空";
    },
    total: function (v, e) {
        return "金额加税额不等于价税合计";
    },
    notZero: function (v, e) {
        return $(e).parent('td').prev().text().replace(':', '') + "不能为0";
    },
    invMaxAmount: function (v, e) {
        return "输入金额不能大于10亿";
    },
    invTotalMaxAmount: function (v, e) {
        return "输入金额不能大于10亿";
    },
//    companyCodeValid:function(v,e){
//        return "公司税号应是15位或者18位";
//    },
    ajaxValid: function (v, e) {
        return $(e).parent('td').prev().text().replace("：", '') + '不存在';
    },
    stmtcode: function (v, e) {
        //return "供应商编号+YYYYMM+两位结算周期代码,结算周期代码如下：10：上半月，20：下半月，30：全月";
        return "网上发票号规则:IV+8位数字";
    },
    remote: "请修正该字段",
    email: "请输入正确格式的电子邮件",
    url: "请输入合法的网址",
    date: "请输入合法的日期",
    dateISO: "请输入合法的日期 (ISO).",
    digits: "只能输入整数",
    creditcard: "请输入合法的信用卡号",
    equalTo: "请再次输入相同的值",
    accept: "请输入拥有合法后缀名的字符串",
    maxlength: $.validator.format("请输入一个 长度最多是 {0} 的字符串"),
    minlength: $.validator.format("请输入一个 长度最少是 {0} 的字符串"),
    rangelength: $.validator.format("请输入 一个长度介于 {0} 和 {1} 之间的字符串"),
    range: $.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
    max: $.validator.format("请输入一个最大为{0} 的值"),
    min: $.validator.format("请输入一个最小为{0} 的值")
});
